//package com.artifex.mupdfdemo;
//
//import android.app.AlertDialog;
//import android.app.ProgressDialog;
//import android.content.Context;
//import android.content.DialogInterface;
//import android.graphics.RectF;
//import android.os.Handler;
//
//class ProgressDialogX extends ProgressDialog {
//	public ProgressDialogX(Context context) {
//		super(context);
//	}
//
//	private boolean mCancelled = false;
//
//	public boolean isCancelled() {
//		return mCancelled;
//	}
//
//	@Override
//	public void cancel() {
//		mCancelled = true;
//		super.cancel();
//	}
//}
//
//public abstract class SearchTask {
//	private static final int SEARCH_PROGRESS_DELAY = 200;
//	private final Context mContext;
//	private final MuPDFCore mCore;
//	private final Handler mHandler;
//	private final AlertDialog.Builder mAlertBuilder;
//	private AsyncTask<Void,Integer,SearchTaskResult> mSearchTask;
//
//	public SearchTask(Context context, MuPDFCore core) {
//		mContext = context;
//		mCore = core;
//		mHandler = new Handler();
//		mAlertBuilder = new AlertDialog.Builder(context);
//	}
//
//	protected abstract void onTextFound(SearchTaskResult result);
//
//	public void stop() {
//		if (mSearchTask != null) {
//			mSearchTask.cancel(true);
//			mSearchTask = null;
//		}
//	}
//
//	public void go(final String text, int direction, int displayPage, int searchPage) {
//		if (mCore == null)
//			return;
//		stop();
//
//		final int increment = direction;
//		final int startIndex = searchPage == -1 ? displayPage : searchPage + increment;
//
//		final ProgressDialogX progressDialog = new ProgressDialogX(mContext);
//		progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
//		progressDialog.setTitle(mContext.getString(R.string.searching_));
//		progressDialog.setOnCancelListener(new DialogInterface.OnCancelListener() {
//			public void onCancel(DialogInterface dialog) {
//				stop();
//			}
//		});
//		progressDialog.setMax(mCore.countPages());
//
//		mSearchTask = new AsyncTask<Void,Integer,SearchTaskResult>() {
//			@Override
//			protected SearchTaskResult doInBackground(Void... params) {
//				int index = startIndex;
//
//				while (0 <= index && index < mCore.countPages() && !isCancelled()) {
//					publishProgress(index);
//					RectF searchHits[] = mCore.searchPage(index, text);
//
//					if (searchHits != null && searchHits.length > 0)
//						return new SearchTaskResult(text, index, searchHits);
//
//					index += increment;
//				}
//				return null;
//			}
//
//			@Override
//			protected void onPostExecute(SearchTaskResult result) {
//				progressDialog.cancel();
//				if (result != null) {
//				    onTextFound(result);
//				} else {
//					mAlertBuilder.setTitle(SearchTaskResult.get() == null ? R.string.text_not_found : R.string.no_further_occurrences_found);
//					AlertDialog alert = mAlertBuilder.create();
//					alert.setButton(AlertDialog.BUTTON_POSITIVE, mContext.getString(R.string.dismiss),
//							(DialogInterface.OnClickListener)null);
//					alert.show();
//				}
//			}
//
//			@Override
//			protected void onCancelled() {
//				progressDialog.cancel();
//			}
//
//			@Override
//			protected void onProgressUpdate(Integer... values) {
//				progressDialog.setProgress(values[0].intValue());
//			}
//
//			@Override
//			protected void onPreExecute() {
//				super.onPreExecute();
//				mHandler.postDelayed(new Runnable() {
//					public void run() {
//						if (!progressDialog.isCancelled())
//						{
//							progressDialog.show();
//							progressDialog.setProgress(startIndex);
//						}
//					}
//				}, SEARCH_PROGRESS_DELAY);
//			}
//		};
//
//		mSearchTask.execute();
//	}
//}
